// 《围棋》作者版权所有。版权所有。
// 此源代码的使用受BSD样式
// 许可证的约束，该许可证可以在许可证文件中找到。

package fs

// StatFS是一个带有Stat方法的文件系统。
type StatFS interface {
	FS

	// Stat返回描述该文件的FileInfo。
	// 如果有错误，则应为*PathError类型。
	Stat(name string) (FileInfo, error)
}

// Stat返回一个FileInfo，描述文件系统中的命名文件。
// 
// 如果fs实现StatFS，Stat将调用fs.Stat。
// 否则，Stat将打开文件以对其进行统计。
func Stat(fsys FS, name string) (FileInfo, error) {
	if fsys, ok := fsys.(StatFS); ok {
		return fsys.Stat(name)
	}

	file, err := fsys.Open(name)
	if err != nil {
		return nil, err
	}
	defer file.Close()
	return file.Stat()
}
